package methodareaandconstantpool;

import java.util.ArrayList;
import java.util.List;

/**
 * VM Args：-XX:PermSize=10M -XX:MaxPermSize=10M
 * 如果在jdk1.6中执行  下面代码会抛出永久代溢出  因为常量池保存在永久代上面    永久代是在方法区
 * 限制方法区的大小来限制  永久代的大小 从而来设置到常量池的大小
 *
 * 由于jdk1.7之后进行了去永久代  所以在jdk1.7中执行是不会产生异常的  因为方法区已经没有永久代   常量池不在这块空间上
 */
public class RuntimeConstantPoolOOM {

    public static void main(String[] args) {
        // 使用List保持着常量池引用，避免Full GC回收常量池行为
        List<String> list = new ArrayList<String>();
        // 10MB的PermSize在integer范围内足够产生OOM了
        int i = 0;
        while (true) {
            list.add(String.valueOf(i++).intern());
        }
    }
}